package com.ruoyi.common.core.domain.entity.socket.bean;

import com.ruoyi.common.constant.socket.SystemCode;
import lombok.Data;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * 服务器与船端之间socket通信的消息报文实体类。
 * 注意：该实体类不包含报文起始符‘$USV’,结束符'#'及最后的一个字节长度的校验码。
 */
@Data
public class BoatMessage implements Serializable {

    /**
     * 舰队编号。此值通常为1.
     */
    private byte fleetCode = 1;
    //无人船号。此值通常为1.
    private byte nobodyShipCode = 1;
    /**
     * 报文编号。也可以称之为报文序号，从0开始，依次递增加1.
     */
    private short messageId;
    /**
     * 报文类型。
     * 0：事件报文
     * 1：配置报文
     * 2：指令报文
     * 3：状态报文
     * 4：心跳报文
     * 5：日志报文
     * 6：测试报文
     * 7：任务报文
     * 8：感知报文
     * 32：编队报文
     */
    private byte messageType;

    /**
     * 系统编号。一般情况下该值通常为0，即主用系统。
     * 0：主用
     * 1：备用1
     * 2：备用2
     * 3：备用3
     */
    private byte systemCode = SystemCode.MAIN.getCode();
    /**
     * 设备类别。此值通常为0x0801，即2049。
     */
    private short deviceType = 2049;
    /**
     * 设备编号。0-254。常见取值有：0，1等。默认取值为1.
     */
    private byte deviceCode = 1;

    /**
     * 数据段集合。
     */
    private List<BaseDataPiece> dataPieceList = new ArrayList<>();

    public BoatMessage() {
    }

    public BoatMessage(byte messageType, byte deviceCode) {
        this.messageType = messageType;
        this.deviceCode = deviceCode;
    }

}
